package jp.co.menox.controller.tmserver;

import jp.co.menox.tmcommon.model.User;
import jp.co.menox.tmserver.service.UserService;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;

import com.google.appengine.api.channel.ChannelService;
import com.google.appengine.api.channel.ChannelServiceFactory;

/**
 * サーバチーム用controller基底クラス<br />
 * 共通処理を記述
 * @author
 *
 */
public abstract class TmServerControllerBase extends Controller {
    
    protected UserService userService;
    {
        userService = new UserService();
    }

    @Override
    protected Navigation setUp() {

        // ログイン済みチェック
        if (!setUserInfo()) {
            // 未ログイン
            return redirect("NoSession.jsp");
        }

//        // channel用設定
//        setChannel();
        
        return null;
    }

    /**
     * セッションよりユーザ情報を取得し、requestScopeに該当するuserレコードを登録する
     * @return false:取得できなかった場合
     */
    private boolean setUserInfo() {

        Long userId = this.<Long>sessionScope("UserId");
        if (userId == null) {
            return false;
        }

        User model = userService.select(userId);
        requestScope("userModel", model);
        
        return true;
    }

    /**
     * 通信用channelを確保する
     */
    protected void setChannel() {
        long userId = this.<Long>sessionScope("UserId");
        
        ChannelService channel = ChannelServiceFactory.getChannelService();
        
        String channelToken = channel.createChannel(Long.toString(userId));
        
        requestScope("userId", userId);
        requestScope("channelToken", channelToken);
    }

}
